<?php

namespace Cekurte\Shortener\Url;

use Cekurte\Shortener\Url\Adapter;

/**
 * Bit.ly Encurtador de URL's
 *
 * Classe básica para utilização da Bit.ly URL Shortener API
 *
 * @author     João Paulo Cercal
 * @version    1.0
 */
class BitLy implements Adapter
{
	/**
     * Usuário para utilização da API
     *
     * @var string
     */
	const API_USER 	= 'jpcercal';
	
	/**
     * Chave para utilização da API
     *
     * @var string
     */
	const API_KEY 	= 'R_27e6534a78e3545b054f98da7ad1db8b';

	/**
     * URL de acesso a API, para encurtar uma URL Longa
     *
     * @var string
     */
    const API_URL_SHORT	= 'http://api.bitly.com/v3/shorten';
    
    /**
     * URL de acesso a API, para desencurtar uma URL Curta
     *
     * @var string
     */
    const API_URL_EXPAND = 'http://api.bitly.com/v3/expand';
    
    /**
     * Formato de Retorno da API
     *
     * @var string
     */
    const API_FORMAT = 'json';
    
    /**
     * Encurta uma URL longa
     * 
     * @param 	string $longUrl
     * 
     * @author 	João Paulo Cercal
	 * @version 1.0
	 * 
     * @return 	string uma url encurtada, por exemplo: http://goo.gl/p9vgX
     */
    public function encurtar( $longUrl )
    {
    	$longUrl = urlencode( $longUrl );
    	
    	// Gera a URL utilizando:
    	// URL da API
    	// NOME do Usuário
    	// CHAVE do Usuário
    	// URL Longa
    	// Formato de Retorno
    	$apiUrl = sprintf('%s?login=%s&apiKey=%s&longUrl=%s&format=%s', self::API_URL_SHORT, self::API_USER, self::API_KEY, $longUrl, self::API_FORMAT );
    	
    	$result = json_decode( file_get_contents( $apiUrl ) );
    	
        return $result->data->url; 
    }
    
    /**
     * Desencurta uma url encurtada
     * 
     * @param 	string $shortUrl
     * @param 	bool $analytics Se true mostra o mapa da URL, do contrário não mostra. O padrão é false (não mostrar)
     * 
     * @author 	João Paulo Cercal
	 * @version 1.0
	 * 
     * @return 	string a url original
     */
    public function desencurtar( $shortUrl, $analytics = false )
    {
    	$shortUrl = urlencode( $shortUrl );
    	
    	// Gera a URL utilizando:
    	// URL da API
    	// NOME do Usuário
    	// CHAVE do Usuário
    	// URL Longa
    	// Formato de Retorno
    	$apiUrl 	= sprintf('%s?login=%s&apiKey=%s&shortUrl=%s&format=%s', self::API_URL_EXPAND, self::API_USER, self::API_KEY, $shortUrl, self::API_FORMAT );

    	$result 	= json_decode( file_get_contents( $apiUrl ) );

        return $result->data->expand[0]->long_url; 
    }
} 